Remote client access platforms and systems, such as Terminal Service™ systems provided by the Microsoft Corporation, allow computers (users) to remotely access application programs hosted by and resident at an application server or servers (server computer). In remote client access systems, client computers typically rely on a server computer to provide computing functionality through the resident application programs. Examples of application programs include word processing, multimedia, and data management programs.
The server computer may be referred to as a host computer or terminal server. In certain cases, there may be multiple server computers. The client computer may be referred to as a remote terminal, remote client, or thin client. The client computer primarily is used for user interface: interaction with a user and device input/output; however, in many cases, a local device or devices are attached to the client computer and accessed by the server computer.
Software on the client computer is typically generic or not application specific, generally consisting of an operating system and general purpose software which includes software to support the remote client access environment. Software at the server computer typically includes specific-purpose application software that provides particular functionality such as multimedia, imaging, database access, word processing, and other types of applications. Data communicated between the client computer and the server computer mostly includes commands and data relating to user interface, such as graphics data, keystrokes, mouse movements, etc., as well as commands and data relating to hardware devices located at the client computer.
The server computer and client computers typically communicate or pass information with one another using a predefined communication protocol such as the remote desktop protocol (RDP) as defined by the Microsoft Corporation. Lower level network protocols such as transmission control protocol over Internet protocol (TCP/IP) are also involved.
Benefits of remote client access systems are that the client computers can be relatively low-powered since most functionality and computation takes place at the server computer. Although the server computer is often more expensive than a typical desktop computer, one application server computer can service many less expensive client computers.
Another advantage in some remote client access systems is that data can reside at the physical location of the server computer; and can be acted upon at that location by application programs without having to be transferred over relatively slow communications links to the client computers—only the user interface is implemented at the physical locations of clients.
Client computers have ports, such as universal serial bus (USB) or FireWire (IEEE 1394) ports, to which one or more local or peripheral hardware devices are attached. Such devices may relate to the user interface, as in the case of USB keyboards. In many cases applications executing at the server computer need to access and interact with such local client devices. Examples of local or peripheral devices include audio recorders, digital cameras, document scanners, external disk drives, and media readers, etc. Such devices are sometimes referred to as plug and play or PNP devices, since the devices become available for use once they are connected to a port.
In a typical Windows®-based desktop environment, local applications communicate with local devices through a series of drivers, referred to as a driver stack. The driver stack particularly is used to facilitate PNP capability of a device. Different responsibilities may be divided among components of the driver stack for purposes of organization and re-usability. For example, some of the drivers are generic to all or certain general classes of local devices and can be used or re-used to communicate with many different devices. Other drivers implement functionality specific to certain devices, and are often designed specifically to accompany these certain devices. Typically, such issues are addressed on a case-by-case basis. For example, in order to support a local device, a corresponding software driver is installed on the local machine or client computer. With different and multiple devices, problems arise as to providing different and correct software drivers to support different hardware devices.
In certain cases, a user may not be using the same client computer in which a particular device is connected; however, the user desires to access or make use of the device. This may be the case, when the user is working “remotely” from another client computer. Furthermore, it may desirable for the server computer to provide access to the local device to more than one client computer or user. Therefore, in a remote client access system, it is desirable for a device at a particular remote client computer to appear to be locally connected to a server computer so that other remote client computers may access the device.